package cn.ljy.quicksnip.config;

import cn.ljy.common.annotation.CurrentAdmin;
import cn.ljy.common.config.Knife4jConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

import java.util.ArrayList;
import java.util.List;

@Configuration
@EnableSwagger2WebMvc
public class MesKnife4jConfiguration extends Knife4jConfiguration {
    //一个Docker代表一个swagger的分组:这里创建后台专用的接口文档分组
    @Bean
    public Docket backstageMesApiConfig() {
        //配置需要调配的全局参数。配置后会在接口自动生成access_token头部信息
        List<Parameter> parameters=new ArrayList<>();
        parameters.add(new ParameterBuilder()
                .name("Authorization")
                .description("后台登录用户保存状态的token")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(true) // 如果token是必须的，则设置为true
                .build());
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("后台快剪业务管理模块")
                .apiInfo(backstageApiInfo())
                //因为@CurrentAdmin是用来获取当前登录用户的注解，不需要在接口文档标准，因此隐藏。
                //注意：这类参数无法通过@ApiParam(hidden = true)注解来隐藏
                .ignoredParameterTypes(CurrentAdmin.class)
                .select()
                //这里指定Controller扫描包路径
                .apis(RequestHandlerSelectors.basePackage("cn.ljy.quicksnip.web.controller.backstage.qs"))
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(parameters);
    }

    @Bean
    public Docket backstageVisualizeApiConfig() {
        //配置需要调配的全局参数。配置后会在接口自动生成access_token头部信息
        List<Parameter> parameters=new ArrayList<>();
        parameters.add(new ParameterBuilder()
                .name("Authorization")
                .description("后台登录用户保存状态的token")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(true) // 如果token是必须的，则设置为true
                .build());
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("统计模块")
                .apiInfo(backstageApiInfo())
                //因为@CurrentAdmin是用来获取当前登录用户的注解，不需要在接口文档标准，因此隐藏。
                //注意：这类参数无法通过@ApiParam(hidden = true)注解来隐藏
                .ignoredParameterTypes(CurrentAdmin.class)
                .select()
                //这里指定Controller扫描包路径
                .apis(RequestHandlerSelectors.basePackage("cn.ljy.quicksnip.web.controller.backstage.visualize"))
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(parameters);
    }
}